package com.zbkj.service.manager;

import com.zbkj.dal.entity.merchant.Merchant;
import com.zbkj.dal.entity.user.User;
import com.zbkj.dal.entity.user.UserBank;
import com.zbkj.dal.entity.user.UserWeekRecord;

import java.math.BigDecimal;
import java.util.List;

public interface UserManager {

    User findByAccount(String account);

    User findByUserId(Integer userId);

    /**
     * 可用用户查询
     *
     * @param userId userId
     * @return @link{User}
     */
    User availableUser(Integer userId);

    List<User> findByUserId(List<Integer> userId);

    /**
     * 查询直接推荐人
     *
     * @param userId 用户Id
     */
    User directSpreadUser(Integer userId);

    /**
     * 查询间接推荐人
     *
     * @param userId 用户Id
     */
    User indirectSpreadUser(Integer userId);

    /**
     * 查询所属店铺
     *
     * @param userId 用户Id
     */
    Merchant spreadMerchant(Integer userId);

    /**
     * 查询用户周记录，如果不存在则创建
     *
     * @param userId 用户 ID
     * @return {@link UserWeekRecord}
     */
    UserWeekRecord selectWeeklyRecord(Integer userId);

    /**
     * 推广人数加1
     *
     * @param userId 用户 ID
     */
    void addRecruitNum(Integer userId);

    /**
     * 推广奖励增加
     *
     * @param userId userId
     * @param reward 奖励金额
     */
    void addRecruitReward(Integer userId, BigDecimal reward);

    /**
     * 订单记录增加
     *
     * @param userId      userId
     * @param orderAmount 订单金额
     */
    void addOrderRecord(Integer userId, BigDecimal orderAmount);

    /**
     * 订单记录取消
     *
     * @param userId      userId
     * @param orderAmount 订单金额
     */
    void cancelOrderRecord(Integer userId, BigDecimal orderAmount);

    /**
     * 一级朋友人数
     */
    List<User> firstFriends(Integer userId);

    /**
     * 二级朋友人数
     */
    List<User> secondFriends(Integer userId);

    void updateShareProfit(Integer userId, Integer enable);

    void addBlacklist(Integer userId);

    UserBank userBankcard(Integer userId);

    void bindUserBankcard(Integer userId, String accountName, String bankCode, String bankcardNo);

    void unbindBankcard(Integer userId, String userBankcardNo);

}
